#define TAM_BUFF_LEX 55
#define TAM_CRESC 20

#define ESTADO_INICIAL               0
#define ESTADO_EXCLAMACAO            2
#define ESTADO_IGUAL                 6
#define ESTADO_MENOR                 9
#define ESTADO_MAIOR                12
#define ESTADO_PIPE                 15
#define ESTADO_AND                  20
#define ESTADO_BARRA                23
#define ESTADO_COMENTARIO           25
#define ESTADO_COMENTARIO_FIM       26
#define ESTADO_PONTO                35
#define ESTADO_ID                   38
#define ESTADO_DIGITO               40
#define ESTADO_PONTO_DIGITO         43
#define ESTADO_E                    44
#define ESTADO_SINAL                45
#define ESTADO_SINAL_DIGITO         46
#define ESTADO_LITERAL              50

#define CHAR_AND                        '&'
#define CHAR_ASPAS                      '"'
#define CHAR_ASTERISCO                  '*'
#define CHAR_BARRA                      '/'
#define CHAR_CHAVE_DIREITA              '}'
#define CHAR_CHAVE_ESQUERDA             '{'
#define CHAR_COLCHETE_DIREITO           ']'
#define CHAR_COLCHETE_ESQUERDO          '['
#define CHAR_DOIS_PONTOS                ':'
#define CHAR_E                          'E'
#define CHAR_E_MINUSCULO                'e'
#define CHAR_ESPACO                     ' '
#define CHAR_EXCLAMACAO                 '!'
#define CHAR_IGUAL                      '='
#define CHAR_QUEBRA_DE_LINHA           '\n'
#define CHAR_MAIOR                      '>'
#define CHAR_MAIS                       '+'
#define CHAR_MENOR                      '<'
#define CHAR_MENOS                      '-'
#define CHAR_PARENTESIS_DIREITO         ')'
#define CHAR_PARENTESIS_ESQUERDO        '('
#define CHAR_PIPE                       '|'
#define CHAR_PONTO                      '.'
#define CHAR_PONTO_E_VIRGULA            ';'
#define CHAR_PORCENTAGEM                '%'
#define CHAR_RETORNO                   '\r'
#define CHAR_TAB                       '\t'
#define CHAR_VIRGULA                    ','

#define TOKEN_MINUS                1
#define TOKEN_NOTEQ                3
#define TOKEN_UNARYNEGATION        4
#define TOKEN_PLUS                 5
#define TOKEN_ASSIGN               7
#define TOKEN_COMPAREEQUAL         8
#define TOKEN_LESSEQUAL           10
#define TOKEN_LESSTHAN            11
#define TOKEN_GREATEREQUAL        13
#define TOKEN_GREATERTHAN         14
#define TOKEN_OR                  16
#define TOKEN_BINARYOR            17
#define TOKEN_MULTIPLICATION      18
#define TOKEN_REST                19
#define TOKEN_AND                 21
#define TOKEN_BINARYAND           22
#define TOKEN_DIV                 24
#define TOKEN_LITERAL             27
#define TOKEN_LBRACE              28
#define TOKEN_RBRACE              29
#define TOKEN_LPAREN              30
#define TOKEN_RPAREN              31
#define TOKEN_LEFTSQUAREBRACKET   32
#define TOKEN_RIGHTSQUAREBRACKET  33
#define TOKEN_SEMICOLON           34
#define TOKEN_COLON               36
#define TOKEN_COMMA               37
#define TOKEN_ID                  39
#define TOKEN_DOT                 41
#define TOKEN_NUM                 47
#define TOKEN_EOF                 49

//Tokens que representam as palavras reservadas.
#define TYPEDEF                   50
#define STRUCT                    51
#define INT                       52
#define FLOAT                     53
#define BOOLEAN                   54
#define IF                        55
#define ELSE                      56
#define WHILE                     57
#define SWITCH                    58
#define BREAK                     59
#define PRINTLN                   60
#define READLN                    61
#define RETURN                    62
#define CASE                      63
#define TRUE                      64
#define FALSE                     65

#define NOVO_TIPO       -1

char* getLexema();
void inicializaLexema();
void inicializaAnalisadorLexico();
void adicionaCaracter(char c);
void finalizaLexema();
void freeLexema();
int getLinha();
int proximoToken();
void leProximoCaracter();
char* nomeToken(int token);
int palavraReservada(int token);

